<?php
/**
 * Created by PhpStorm.
 * User: xh
 * Date: 2019/12/16
 * Time: 2:19 PM
 */

namespace weChat\pay;


class Remit extends Pit
{
    //公众账号ID	appid	是	String(32)	wx8888888888888888	微信分配的公众账号ID（企业号corpid即为此appId）

    //商户号	mch_id	是	String(32)	1900000109	微信支付分配的商户号

    //随机字符串	nonce_str	是	String(32)	5K8264ILTKCH16CQ2502SI8ZNMTM67VS	随机字符串，不长于32位。推荐随机数生成算法

    //签名	sign	是	String(32)	C380BEC2BFD727A4B6845133519F3AD6	签名，详见签名生成算法

    //签名类型	sign_type	否	String(32)	HMAC-SHA256	签名类型，目前支持HMAC-SHA256和MD5，默认为MD5

    //商户订单号	partner_trade_no	商户订单号，需保持唯一性(只能是字母或者数字，不能包含有其它字符)
    public $partner_trade_no = '';

    //校验用户姓名选项 NO_CHECK：不校验真实姓名
    //FORCE_CHECK：强校验真实姓名
    public $check_name = '';
    //收款用户姓名	re_user_name	否	收款用户真实姓名。
    //如果check_name设置为FORCE_CHECK，则必填用户真实姓名
    //如需电子回单，需要传入收款用户姓名
    public $re_user_name = '';

    //金额	amount	企业付款金额，单位为分
    public $amount = '';
    //企业付款备注		企业付款备注，必填。注意：备注中的敏感词会被转成字符
    public $desc = '';
    //退款货币种类	refund_fee_type	否	String(8)	CNY	退款货币类型，需与支付一致，或者不填。符合ISO 4217标准的三位字母代码，默认人民币：CNY，其他值列表详见货币类型
    public $refundFeeType = 'CNY';
    //Ip地址	该IP同在商户平台设置的IP白名单中的IP没有关联，该IP可传用户端或者服务端的IP。
    public $spbill_create_ip = '';


    /** 打款信息
     * @param array $refundInfo
     */
    /** 打款操作
     * @param array $refundInfo 打款信息
     * @param string $cert 身份类型 用于查找证书
     */
    public function handle(array &$refundInfo,string $cert): void
    {
        $xml = $this->disposalData();
        $returnXml = '';
        $this->curl($returnXml, $xml, 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers',true,'cert/'.$cert);
        $data = [];
        $res = $this->toArray($returnXml, $data);
        if (empty($res)) {
            $this->exception('xml数据不存在');
        }
        if ($data['return_code'] != 'SUCCESS') {
            $this->exception('返回状态码非SUCCESS，错误信息:' . $data['return_msg']);
        }
        $refundInfo = $data;
    }

    /** 整理数据
     * @return string
     */
    protected function disposalData(): string
    {
        $parameter['mch_appid'] = $this->appId;
        $parameter['mchid'] = $this->mchId;
        $parameter['nonce_str'] = $this->nonceStr();
        //$parameter['sign_type'] = $this->signType;
        $parameter['check_name'] = 'NO_CHECK';
        if (empty($this->partner_trade_no)) {
            $this->exception('必须要有 partner_trade_no--商户订单号');
        }
        if ($this->partner_trade_no) {
            $parameter['partner_trade_no'] = $this->partner_trade_no;
        }

        if (empty($this->openid)) {
            $this->exception('必须要有openid--用户openid');
        }
        $parameter['openid'] = $this->openid;

        if (empty($this->amount)) {
            $this->exception('必须要有amount--企业付款金额，单位为分');
        }
        $parameter['amount'] = $this->amount;

        if ($this->desc) {
            $parameter['desc'] = $this->desc;
        }
        $parameter['desc'] = $this->desc;

        $parameter['sign'] = $this->sign($parameter, $this->signType);

        return $this->toXml($parameter);
    }


}